package cn.lg.soar.message.service;

import cn.lg.soar.common.model.PageQuery;
import cn.lg.soar.database.base.service.IBaseService;
import cn.lg.soar.database.query.QueryParams;
import cn.lg.soar.message.entity.Notice;
import cn.lg.soar.message.model.NoticeDetailVo;
import cn.lg.soar.message.model.NoticeVo;
import com.baomidou.mybatisplus.core.metadata.IPage;

import java.util.List;

/**
 * @author luguoxiang
 * 开源项目：https://gitee.com/lgx1992/lg-soar 求star！请给我star！请帮我点个star！
 */
public interface INoticeService extends IBaseService<Notice> {

    /**
     * 广播
     * @param notice
     */
    void broadcast(Notice notice);

    /**
     * 通知指定用户
     * @param notice
     * @param userIds
     */
    void toUser(Notice notice, List<Long> userIds);

    IPage<NoticeVo> page(PageQuery pageQuery, QueryParams params);

    /**
     * 获取用户未读通知列表
     * @param userId
     * @return
     */
    IPage<Notice> unreadNoticeList(IPage<Notice> page, Long userId);

    /**
     * 更新为读取状态
     */
    void updateRead(Long noticeId, Long userId);

    default void updateRead(List<Long> noticeIds, Long userId) {
        for (Long noticeId : noticeIds) {
            updateRead(noticeId, userId);
        }
    }

    /**
     * 读取消息
     * @param id
     * @return
     */
    Notice read(Long id);

    /**
     * 通知详情
     * @param id
     * @return
     */
    NoticeDetailVo detail(Long id);

}
